`
https://leetcode.cn/problems/maximum-product-subarray/
`

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxProduct = function (nums) {
  // 保存最大结果
  let maxRes = nums[0]
  // 保存当前最大乘积和最小乘积，保存最小乘积是为了处理负数情况
  let curMax = nums[0], curMin = nums[0]
  for (let i = 1; i < nums.length; i++) {
    const tmpMax = curMax, tmpMin = curMin
    // 更新当前最大乘积
    curMax = Math.max(
      tmpMax * nums[i],
      tmpMin * nums[i],
      nums[i]
    )
    // 更新当前最小乘积
    curMin = Math.min(
      tmpMax * nums[i],
      tmpMin * nums[i],
      nums[i]
    )
    // 更新当前最大结果
    maxRes = Math.max(maxRes, curMax)
  }
  return maxRes
};